package com.example.springBoot.controller;

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.PageRequest;
import org.springframework.data.domain.Sort;
import org.springframework.data.domain.Sort.Direction;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import com.example.springBoot.common.ReturnNext;
import com.example.springBoot.dao.ArticleDao;
import com.example.springBoot.dao.ArticleTypeDao;
import com.example.springBoot.dao.UserDao;
import com.example.springBoot.domain.Article;
import com.example.springBoot.domain.ArticleType;
import com.example.springBoot.domain.User;

/**
 * @author yangchengwei(438996087@qq.com)
 * @deprecated:前端Ajax调取数据类
 */
@RestController
public class AjaxController {

	private final Logger logger = LoggerFactory.getLogger(this.getClass());

	@Autowired
	private ArticleDao articleDao;

	@Autowired
	private UserDao userDao;

	@Autowired
	private ArticleTypeDao articleTypeDao;

	/**
	 * Title: getallarticle Description:获取所有的文章 date: 2017年11月21日
	 * 
	 * @return 返回最近五条的文章
	 */
	@RequestMapping("/getallarticle")
	public List<Article> getallarticle() {
		try {
			List<Article> list = articleDao.findTop5ByOrderByRegTimeDesc();
			for (Article article : list) {
				SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd日 HH时mm分ss秒");
				SimpleDateFormat sdf2 = new SimpleDateFormat("yyyy-MM-dd");
				Date date = sdf.parse(article.getRegTime());
				article.setRegTime(sdf2.format(date));
				article.setArticleBody(null);
				article.setUser(new User(article.getUser().getId(), article.getUser().getNickName()));
				article.setRecommend(null);
			}
			return list;
		} catch (Exception e) {
			e.printStackTrace();
			return null;
		}

	}

	/**
	 * Title: getoneuser Description:根据用户Id获取一个用户的详细情况 date: 2017年11月21日
	 * 
	 * @param id
	 * @return 返回一个用户的详细情况
	 */
	@RequestMapping("/getoneuser/{id}")
	public User getoneuser(@PathVariable Long id) {
		User user = userDao.findByid(id);
		if (user != null) {
			user.setPassWord(null);
			return user;
		} else {
			return null;
		}
	}

	/**
	 * Title: getonearticle Description:根据文章Id获取一个文章的详细情况 date: 2017年11月21日
	 * 
	 * @param id
	 * @return 返回一个文章的详细情况
	 */
	@RequestMapping("/getonearticle/{id}")
	public Article getonearticle(@PathVariable Long id) {
		try {
			Article article = articleDao.findById(id);
			if (article != null) {
				article.setReadnum(article.getReadnum() + 1);
				articleDao.save(article);
				SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd日 HH时mm分ss秒");
				Date date = sdf.parse(article.getRegTime());
				SimpleDateFormat sdf2 = new SimpleDateFormat("yyyy-MM-dd");
				article.setRegTime(sdf2.format(date));
				article.setUser(new User(article.getUser().getId(), article.getUser().getNickName()));
				return article;
			} else {
				return null;
			}
		} catch (ParseException e) {
			logger.error(e.toString());
			return null;
		}
	}

	/**
	 * Title: getarticletype Description:获取所有的文章类型 date: 2017年11月21日
	 * 
	 * @return 返回文章的所有类型
	 */
	@SuppressWarnings("unused")
	@RequestMapping("/getarticletype")
	public List<ArticleType> getarticletype() {
		List<ArticleType> list = articleTypeDao.findBytypeStatus(1);
		if (list.size() > 0 || list != null) {
			return list;
		} else {
			return null;
		}
	}

	/**
	 * Title: getarticlenext Description:根据当前文章Id获取当前文章的前一篇文章和下一篇文章
	 * date:2017年11月21日
	 * 
	 * @param id
	 * @return 返回当前文章的前一篇文章和下一篇文章
	 */
	@SuppressWarnings("unused")
	@RequestMapping("/getarticlenext/{id}")
	public ReturnNext getarticlenext(@PathVariable Long id) {
		Article far = articleDao.findTop1ByIdLessThanOrderByIdDesc(id);
		Article nar = articleDao.findTop1ByIdGreaterThan(id);
		ReturnNext rn = new ReturnNext();
		if (far == null) {
			rn.setfArticle(far);
			rn.setnArticle(new Article(nar.getId(), nar.getArticleName()));
		} else if (nar == null) {
			rn.setfArticle(new Article(far.getId(), far.getArticleName()));
			rn.setnArticle(nar);
		} else if (far == null && nar == null) {
			rn.setfArticle(null);
			rn.setnArticle(null);
		} else {
			rn.setfArticle(new Article(far.getId(), far.getArticleName()));
			rn.setnArticle(new Article(nar.getId(), nar.getArticleName()));
		}
		return rn;
	}

	/**
	 * Title: getallnewarticle Description:获取最新文章的前面8篇 date: 2017年11月21日
	 * 
	 * @return 返回最新文章的前面8篇
	 */
	@RequestMapping("/getallnewarticle")
	public List<Article> getallnewarticle() {
		List<Article> alllist = articleDao.findTop8ByOrderByRegTimeDesc();
		List<Article> returnlist = new ArrayList<Article>();
		for (Article article : alllist) {
			Article returnarticle = new Article(article.getId(), article.getArticleName());
			returnlist.add(returnarticle);
		}
		return returnlist;
	}

	/**
	 * Title: getrecommendarticle Description:获取当前坐着的推荐文章（限制8条） date:2017年11月21日
	 * 
	 * @return 返回8条作者的文章
	 */
	@RequestMapping("/getrecommendarticle")
	public List<Article> getrecommendarticle() {
		List<Article> list = articleDao.findTop8ByRecommendOrderByRegTimeDesc((long) 2);
		List<Article> returnlist = new ArrayList<Article>();
		for (Article article : list) {
			Article returnarticle = new Article(article.getId(), article.getArticleName());
			returnlist.add(returnarticle);
		}
		return returnlist;
	}

	/**
	 * Title: getarticlepage Description:分页获取所有文章显示 date: 2017年11月23日
	 * 
	 * @return
	 */
	@RequestMapping("/getarticlepage/{page}")
	public Page<Article> getarticlepage(@PathVariable int page) {
		try {
			int size = 10;
			Sort sort = new Sort(Direction.DESC, "regTime");
			PageRequest pageable = new PageRequest(page - 1, size, sort);
			Page<Article> articlelist = articleDao.findAll(pageable);
			for (Article article : articlelist) {
				SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd日 HH时mm分ss秒");
				Date date = sdf.parse(article.getRegTime());
				SimpleDateFormat sdf2 = new SimpleDateFormat("yyyy-MM-dd");
				article.setRegTime(sdf2.format(date));
				article.setArticleBody(null);
				article.setUser(new User(article.getUser().getId(), article.getUser().getNickName()));
				article.setRecommend(null);
			}
			return articlelist;
		} catch (ParseException e) {
			logger.error(e.toString());
			return null;
		}
	}

	/**
	 * Title: gettypearticlepage Description: 根据文章类型ID分页查改类型所有的文章显示 date:
	 * 2017年11月28日
	 * 
	 * @param page
	 *            当前页数
	 * @param typeid
	 *            当前所选择的类型
	 * @return
	 */
	@RequestMapping("/gettypearticlepage/{page}/{typeid}")
	public Page<Article> gettypearticlepage(@PathVariable int page, @PathVariable Long typeid) {
		try {
			int size = 10;
			Sort sort = new Sort(Direction.DESC, "regTime");
			PageRequest pageable = new PageRequest(page - 1, size, sort);
			ArticleType articleType = articleTypeDao.findById(typeid);
			Page<Article> articlelist = articleDao.findByArticleType(articleType, pageable);
			for (Article article : articlelist) {
				SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd日 HH时mm分ss秒");
				Date date = sdf.parse(article.getRegTime());
				SimpleDateFormat sdf2 = new SimpleDateFormat("yyyy-MM-dd");
				article.setRegTime(sdf2.format(date));
				article.setArticleBody(null);
				article.setUser(new User(article.getUser().getId(), article.getUser().getNickName()));
				article.setRecommend(null);
			}
			return articlelist;
		} catch (ParseException e) {
			logger.error(e.toString());
			return null;
		}
	}

	/**
	* Title: getclickarticle
	* Description: 安装第几排行获取8条数据
	* date: 2017年11月29日
	* @return
	 */
	@RequestMapping("/getclickarticle")
	public List<Article> getclickarticle() {
		List<Article> listarticle = articleDao.findTop8ByOrderByReadnumDesc();
		List<Article> returnlist = new ArrayList<Article>();
		if (listarticle.size() > 0 && listarticle != null) {
			for(Article article : listarticle){
				Article returnarticle = new Article(article.getId(), article.getArticleName());
				returnlist.add(returnarticle);
			}
			return returnlist;
		} else {
			return null;
		}
	}
}
